% 定义本书中使用到的格式

\ctexset {chapter = {pagestyle = headings}}

\usepackage{array}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{calc}
\usepackage{caption}
\captionsetup[figure]{labelsep=none}

\usepackage{diagbox}
\usepackage{enumitem}
\usepackage{etoolbox}
\usepackage{float}
\usepackage{geometry}
\geometry{a4paper,left=2cm,right=2cm,top=2cm,bottom=1cm}

\usepackage{hyperref}
\hypersetup{colorlinks=true, linkcolor=red}

\usepackage{longdivision}
\usepackage{makecell}
\usepackage{multirow}
\usepackage{polynom}
\usepackage[figuresright]{rotating}
\usepackage{wrapfig}
\usepackage{tikz}
\usetikzlibrary{
  arrows.meta,
  calc,
  decorations.pathmorphing,
  intersections,
  patterns,
  patterns.meta,
  through,
}

\usepackage{xlop}
\usepackage{xparse}

% 绘制带圈的数字
\newcommand{\circled}[2][]{\tikz[baseline=(char.base)]
    {\node[shape = circle, draw, inner sep = 1pt]
    (char) {\phantom{\ifblank{#1}{#2}{#1}}};%
    \node at (char.center) {\makebox[0pt][c]{#2}};}}
\robustify{\circled}

% 罗马数字
\makeatletter
\newcommand{\rmnum}[1]{\romannumeral #1}
\newcommand{\Rmnum}[1]{\expandafter\@slowromancap\romannumeral #1@}
\makeatother

\newcommand{\gongshishangyi}{\setlength\abovedisplayskip{-1.5em}} % 当 “解:” 后直接写公式时，为了“解”与公式水平对齐所需要的偏移。
\newcommand{\lianxi}{\textbf{练\quad 习}}
\newcommand{\xhx}[1][2em]{\underline{\hspace{#1}}}

\counterwithout*{subsection}{section}
\counterwithin*{subsection}{chapter}
\setcounter{secnumdepth}{3}
\renewcommand{\thesection}{\chinese{section}}
\renewcommand{\thesubsection}{\arabic{chapter}.\arabic{subsection}}
\renewcommand{\thesubsubsection}{\arabic{subsubsection}.}

\renewcommand{\thefigure}{\thechapter-\arabic{figure}}
\renewcommand{\thefootnote}{\circled{\arabic{footnote}}}

% 在不改变 counter 值的情况下，重置 counter 的子 counter
\newcommand{\touchcounter}[1]{\stepcounter{#1} \addtocounter{#1}{-1}}

% 没有编号但又需要添加到目录中的 section (No num(ber) section)。
% 参数1: 目录中的文字（可选，如果没有指定，则使用参数2的值）
% 参数2: 正文中的文字
\NewDocumentCommand{\nonumsection}{o m}{%
  \touchcounter{section}
  \section*{#2}
  \IfNoValueTF{#1}
    {\addcontentsline{toc}{section}{#2}}
    {\addcontentsline{toc}{section}{#1}}
}

% 没有编号但又需要添加到目录中的 subsection (No num(ber) subsection)。
% 参数1: 目录中的文字（可选，如果没有指定，则使用参数2的值）
% 参数2: 正文中的文字
\NewDocumentCommand{\nonumsubsection}{o m}{%
  \touchcounter{subsection}
  \subsection*{#2}
  \IfNoValueTF{#1}
    {\addcontentsline{toc}{subsection}{#2}}
    {\addcontentsline{toc}{subsection}{#1}}
}

\newcounter{cntliti}[subsubsection]           % 例题的计数器
\newcommand{\liti}{ % 例题的标题
  \stepcounter{cntliti}
  \textbf{例\thecntliti}
}

\newcommand{\jie}{\textbf{解: }}
\newcommand{\zhengming}{\textbf{证明: }}

\newcounter{cntxiti}                       % “习题”的计数器
\newcommand{\xiti}{%
  \stepcounter{cntxiti}
  \vspace{1em}
  {\centering \nonumsubsection{\labelxiti}}
}
\newcommand{\labelxiti}{习题 \chinese{cntxiti}}

\newcommand{\xiaojie}{%
  \nonumsection[\labelxiaojie]{\huge \labelxiaojie}
}
\newcommand{\labelxiaojie}{小 \hspace{2em} 结}

\newcounter{cntxiaoti}[subsubsection]      % 小题的计数器
\newcounter{cntxiaoxiaoti}[cntxiaoti]      % 小小题的计数器
\counterwithin*{cntxiaoxiaoti}{cntliti}

\newlength{\lenLabel}                     % 内部变量：用于计算题目前编号所占的长度
\newlength{\lenParent}                    % 内部变量：用于记录父题目编号所占的长度
\setlength{\lenParent}{0em}

\newenvironment{xiaotis}{ % “小题” 环境
  \NewDocumentCommand \xiaoti {s m} { % 小题的标题
    \IfBooleanTF {##1}
      {
        \setlength{\lenLabel}{\widthof{\labelxiaoti}}
        \hangafter 1\setlength{\hangindent}{\parindent + \lenLabel}{\hspace{\lenLabel}##2}
      }
      {
        \stepcounter{cntxiaoti}
        \setlength{\lenLabel}{\widthof{\labelxiaoti}}
        \hangafter 1\setlength{\hangindent}{\parindent + \lenLabel}{\labelxiaoti ##2}
      }
  }
  \newcommand{\labelxiaoti}{\arabic{cntxiaoti}. }  % 1. 2. 3. ……
}{%
}

\newenvironment{xiaoxiaotis}{ % “小小题” 环境
  \setlength{\lenParent}{\lenParent + \lenLabel}
  \newcommand{\xiaoxiaoti}[1] { % 小小题的标题
    \stepcounter{cntxiaoxiaoti}
    \setlength{\lenLabel}{\widthof{\labelxiaoxiaoti}}
    \hangafter 1\setlength{\hangindent}{\parindent + \lenParent + \lenLabel + 0.5em}{\hspace{\lenParent}\labelxiaoxiaoti##1}
  }
  \newcommand{\labelxiaoxiaoti}{（\arabic{cntxiaoxiaoti}）} % （1） （2） （3） ……
}{%
}

\newcommand{\twoInLine}  [3][10em] {\begin{tabular}[t]{*{2}{@{}p{#1}}} #2 & #3\end{tabular}}
\newcommand{\threeInLine}[4][10em] {\begin{tabular}[t]{*{3}{@{}p{#1}}} #2 & #3 & #4\end{tabular}}
\newcommand{\fourInLine} [5][10em] {\begin{tabular}[t]{*{4}{@{}p{#1}}} #2 & #3 & #4 & #5\end{tabular}}

\newcommand{\twoInLineXxt}  [3][10em] {\begin{tabular}[t]{*{2}{@{}p{#1}}} \xiaoxiaoti{#2} & \xiaoxiaoti{#3}\end{tabular}}
\newcommand{\threeInLineXxt}[4][10em] {\begin{tabular}[t]{*{3}{@{}p{#1}}} \xiaoxiaoti{#2} & \xiaoxiaoti{#3} & \xiaoxiaoti{#4}\end{tabular}}
\newcommand{\fourInLineXxt} [5][10em] {\begin{tabular}[t]{*{4}{@{}p{#1}}} \xiaoxiaoti{#2} & \xiaoxiaoti{#3} & \xiaoxiaoti{#4} & \xiaoxiaoti{#5}\end{tabular}}

\newcommand{\jiange}{\vspace{0.5em}} % 手工调整垂直间隔（测试发现 0.5em 比较合适。不支持参数，特殊情况直接使用 \vspace{} 命令。）

% 修改数学公式与上下文的距离
\makeatletter
\renewcommand\normalsize{%
    \abovedisplayskip 1\p@ \@plus1\p@ \@minus6\p@
    \belowdisplayskip \abovedisplayskip
}
\makeatother


%----------------------------------
% （重）定义一些数学符号
%  一是为了使用/记忆上的方便，二是如果以后有变动，只需要修改一处。
\newcommand{\kongji}{\varnothing}      % 空集
\newcommand{\buji}{\overline}          % 补集
\newcommand*\xiangsi{%                 % 相似 (如果不在意有些不同，可以使用 \backsim )
    \mathrel{\text{%
            \tikz \draw[baseline] (-.25em,1.15ex) .. controls (-.55em,1.15ex) and (-.51em,.23ex) .. (-.275em,.23ex) .. controls (0,.23ex) and (0,1.15ex) .. (.275em,1.15ex) .. controls (.51em,1.15ex) and (.55em,.23ex) .. (.25em,.23ex);%
}}}

% 绘制 弧度 符号。代码来自
%    https://tex.stackexchange.com/questions/96680/
\makeatletter
\DeclareFontFamily{U}{tipa}{}
\DeclareFontShape{U}{tipa}{m}{n}{<->tipa10}{}
\newcommand{\hudu@char}{{\usefont{U}{tipa}{m}{n}\symbol{62}}}%

\newcommand{\hudu}[1]{\mathpalette\hudu@hudu{#1}}

\newcommand{\hudu@hudu}[2]{%
  \sbox0{$\m@th#1#2$}%
  \vbox{
    \hbox{\resizebox{\wd0}{\height}{\hudu@char}}
    \nointerlineskip
    \box0
  }%
}
\makeatother

%----------------------------------
\newlength{\defaultParIndent}  % 页面缺省的 \parindent 长度。
\setlength{\defaultParIndent}{\parindent}

%----------------------------------
\newtheorem{theorem}{定理}

%----------------------------------
\newcounter{mylabel}
\newcommand{\mylabel}[1]{\refstepcounter{mylabel} \label{#1}}
